package com.welike.shibo.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.welike.shibo.eneity.JsonResult;
import com.welike.shibo.eneity.LoginUser;
import com.welike.shibo.eneity.User;
import com.welike.shibo.vo.UserInfoListVO;
import com.welike.shibo.vo.UserInfoVO;
import com.welike.shibo.vo.page.SearchUserPageVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 *
 * @author fangyu
 * @date 2019-08-20
 */
public interface UserService extends IService<User> {

    /**
     * 注册账号
     * @param phone
     * @param password
     * @return
     */
    JsonResult resgiter(String phone, String password);

    LoginUser queryUserInfoByPhoneAndPwd(String phone, String password);

    /**
     * 通过手机号查询用户信息
     * @param phone
     * @return
     */
    LoginUser queryUserByPhone(String phone);

    /**
     * 查询手机号是否存在
     * @param phone
     * @return
     */
    boolean queryPhoneByPhone(String phone);

    /**
     * 通过uid更新设备信息
     * @param DeviceId
     * @param DeviceType
     * @param uid
     */
    void updateDeviceInfoByUid(String DeviceId, String DeviceType, String uid);

    /**
     * 查询关注了哪些人的id
     * @param uid 自己的uid作为粉丝, 关注者
     * @return List
     */
    List<String> queryFollowList(String uid);

    /**
     * 查询有哪些粉丝关注了你
     * @param uid 自己作为被关注者
     * @return List
     */
    List<String> queryFansList(String uid);

    /**
     * 通过手机号查询用户状态
     * @param phone 手机号
     * @return 用户状态
     */
    Integer queryStatusByPhone(String phone);

    /**
     * 通过用户id(uid)查询用户信息
     * @param uid
     * @return
     */
    User queryUserByUid(String uid);

    /**
     * 通过用户id(uid)查询用户昵称
     * @param uid
     * @return
     */
    String queryNickNameByUid(String uid);

    /**
     * 通过用户id(uid)查询用户头像
     * @param uid
     * @return
     */
    String queryAvatarByUid(String uid);

    /**
     * 通过用户id(uid)重新设备号
     * @param uid
     * @return
     */
    String queryDeviceIdByUid(String uid);

    /**
     * 通过用户id(uid)重新设备类型
     * @param uid
     * @return
     */
    String queryDeviceTypeByUid(String uid);

    /**
     * 通过uid查询用户信息返回UserInfoVO
     * @param uid
     * @return
     */
    UserInfoVO queryUserInfo(String uid);

    /**
     * 统计所有用户的数量
     * @return
     */
    Integer countByUser();

    /**
     * 后台用户统计
     * @param page
     * @param pageSize
     * @return
     */
    IPage<UserInfoListVO> queryAllUserInfo(Integer page, Integer pageSize, String key);

    /**
     * 上传头像功能
     * @param avatar
     * @return
     * @throws IOException
     */
    String uploadAvatar(MultipartFile avatar) throws IOException;

    /**
     * 查询所有的大V
     * @return
     */
    List<String> queryAllVipUser();

    /**
     * 搜索用户
     * @param page
     * @param pageSize
     * @param key
     * @return
     */
    IPage<SearchUserPageVo> searchUser(Integer page, Integer pageSize, String key);

    /**
     * 确认uid是否存在
     * @param uid
     * @return
     */
    boolean queryUid(String uid);

    /**
     * 通过手机号查找uid
     * @param phone
     * @return
     */
    String queryUidByPhone(String phone);

    /**
     * 更新用户信息
     * @param requestJson
     * @date 2019-11-23 23:11
     * @return JsonResult
     */
    JsonResult updateUser(JSONObject requestJson);

    /**
     * 更新用户状态信息
     * @param requestJson
     * @return
     */
    JsonResult updateStatus(JSONObject requestJson);

    /**
     * 忘记密码
     * @param phone
     * @param pwd
     * @return
     */
    JsonResult resetPwd(String phone, String pwd);
}
